package org.springframework.beans.factory.config;

import org.springframework.beans.BeansException;

/**
 * @Name BeanPostProcessor
 * @Description: Bean 实例后处理器接口
 * 描述信息：该接口是 Spring 容器的扩展（装饰器模式）机制，实现在 Bean 实例化之后修改或替换 Bean 实例。
 * @Version v1.0.0
 * @Author: lichao
 * @Date: 2024-03-19 16:48:54
 **/
public interface BeanPostProcessor {

    /**
     * 在 Bean 实例化之后，执行初始化方法之前执行此方法，修改或替换 Bean 实例
     *
     * @param bean     Bean 实例
     * @param beanName Bean 名称
     * @return java.lang.Object 结果
     * @version v1.0.0
     * @author lichao
     * @date 2024-03-19 16:51:36
     */
    Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;

    /**
     * 在 Bean 实例化之后，执行初始化方法之后执行此方法，修改或替换 Bean 实例
     *
     * @param bean     Bean 实例
     * @param beanName Bean 名称
     * @return java.lang.Object 结果
     * @version v1.0.0
     * @author lichao
     * @date 2024-03-19 16:52:47
     */
    Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;

}
